package com.foreknow.demo10;

/**
 * 主人类
 */
public class Master {
    public void cure(Pet pet) { //参数为父类型 pet=Dog对象
        if(pet.getHealth()<60) {
            pet.toHospital();
        }
    }

    /**
     * 子类中新扩充的方法对象父类来说是不可见的，一定要将父类型强制转换为子类型，才能调用子类中新扩充的方法。
     * pet instanceof Dog 判断pet与Dog是否有继承关系，如果有返回结果为true
     * @param pet
     */
    public void play(Pet pet) {
        if(pet instanceof Dog) { //true
            Dog d = (Dog) pet; // 将父类型强制转换为子类型
            d.catchFly();
        }else if(pet instanceof Penguin) {
            Penguin p = (Penguin) pet;
            p.swimming();
        }
    }

    public static void main(String[] args) {
        Master master = new Master();
        //Pet pet = new Dog(); //父类的引用指向子类的对象
        Dog dog = new Dog();
        dog.setName("大黄");
        dog.setHealth(40);
        dog.setLove(100);
        master.cure(dog);
        master.play(dog);
        //实现主人带Penguin看病
        //pet = new Penguin();
        Penguin penguin = new Penguin();
        penguin.setName("QQ");
        penguin.setHealth(30);
        penguin.setLove(100);
        master.cure(penguin);
        master.play(penguin);

    }

}
